home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 August / macformat-027.iso / mac / Shareware City / Developers / Oberon⁄F / Form / Mod / Cmds (.txt) next >
Encoding:
Oberon Document  |  1994-06-07  |  7.9 KB  |  217 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Geneva
  16. Geneva
  17. StdStamps.StdViewDesc
  18. Geneva
  19. MODULE FormCmds;
  20. (* OmInc 
  21.     IMPORT
  22.         Domains, Ports, Models, Views, Controllers, Properties, Dialog, Containers,
  23.         Controls, FormModels, FormViews, FormControllers;
  24.     CONST
  25.         left = 0; top = 1; right = 2; bottom = 3; row = 4; column = 5;
  26.         minW = 20 * Ports.mm; minH = 5 * Ports.mm;
  27.         maxW = 200 * Ports.mm; maxH = 50 * Ports.mm;
  28.     PROCEDURE FindExtrema (c: FormControllers.Controller; VAR l, t, r, b, h, v: LONGINT;
  29.                                                 VAR s: FormControllers.List);
  30.         VAR n: INTEGER; p: FormControllers. List; q: FormModels.Reader; w: Views.View;
  31.     BEGIN    (* there is at least one view selected *)
  32.         l := MAX(LONGINT); t := MAX(LONGINT); r := MIN(LONGINT); b := MIN(LONGINT);
  33.         h := 0; v := 0; n := 0; s := NIL;
  34.         q := c.form.NewReader(NIL); q.Set(NIL); q.ReadView(w);
  35.         WHILE w # NIL DO
  36.             IF c.IsSelected(w) THEN
  37.                 INC(h, q.l); INC(h, q.r); INC(v, q.t); INC(v, q.b); INC(n, 2);
  38.                 NEW(p); p.next := s; s := p; p.view := w;
  39.                 IF q.l < l THEN l := q.l END;
  40.                 IF q.t < t THEN t := q.t END;
  41.                 IF q.r > r THEN r := q.r END;
  42.                 IF q.b > b THEN b := q.b END
  43.             END;
  44.             q.ReadView(w)
  45.         END;
  46.         h := h DIV n; v := v DIV n
  47.     END FindExtrema;
  48.     PROCEDURE Move (c: FormControllers.Controller; s: FormControllers. List; p: LONGINT;
  49.                                     side: INTEGER; name: Domains.OpName);
  50.         VAR script: Domains.Operation; dx, dy: LONGINT; l, t, r, b: LONGINT; h: FormControllers.List;
  51.     BEGIN
  52.         h := s;
  53.         Views.BeginScript(c.view, name, script);
  54.         WHILE s # NIL DO
  55.             FormModels.GetRect(s.view, l, t, r, b);
  56.             IF side = left THEN dx := p - l; dy := 0
  57.             ELSIF side = top THEN dx := 0; dy := p - t
  58.             ELSIF side = right THEN dx := p - r; dy := 0
  59.             ELSIF side = bottom THEN dx := 0; dy := p - b
  60.             ELSIF side = row THEN dx := 0; dy := p - (t + b) DIV 2
  61.             ELSIF side = column THEN dx := p - (l + r) DIV 2; dy := 0
  62.             END;
  63.             FormViews.RoundToGrid(c.ThisView(), dx, dy);
  64.             c.form.Move(s.view, dx, dy);
  65.             s := s.next
  66.         END;
  67.         Views.EndScript(c.view, script);
  68.         WHILE h # NIL DO c.Select(h.view); h := h.next END
  69.     END Move;
  70.     PROCEDURE AlignLeft*;
  71.         VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
  72.     BEGIN
  73.         c := FormControllers.Focus();
  74.         IF (c # NIL) & c.HasSelection() THEN
  75.             FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, l, left, "#Form:AlignLeft")
  76.         ELSE Dialog.ShowMsg("no focus or no selection")
  77.         END
  78.     END AlignLeft;
  79.     PROCEDURE AlignRight*;
  80.         VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
  81.     BEGIN
  82.         c := FormControllers.Focus();
  83.         IF (c # NIL) & c.HasSelection() THEN
  84.             FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, r, right, "#Form:AlignRight")
  85.         ELSE Dialog.ShowMsg("no focus or no selection")
  86.         END
  87.     END AlignRight;
  88.     PROCEDURE AlignTop*;
  89.         VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
  90.     BEGIN
  91.         c := FormControllers.Focus();
  92.         IF (c # NIL) & c.HasSelection() THEN
  93.             FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, t, top, "#Form:AlignTop")
  94.         ELSE Dialog.ShowMsg("no focus or no selection")
  95.         END
  96.     END AlignTop;
  97.     PROCEDURE AlignBottom*;
  98.         VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
  99.     BEGIN
  100.         c := FormControllers.Focus();
  101.         IF (c # NIL) & c.HasSelection() THEN
  102.             FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, b, bottom, "#Form:AlignBottom")
  103.         ELSE Dialog.ShowMsg("no focus or no selection")
  104.         END
  105.     END AlignBottom;
  106.     PROCEDURE AlignToRow*;
  107.         VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
  108.     BEGIN
  109.         c := FormControllers.Focus();
  110.         IF (c # NIL) & c.HasSelection() THEN
  111.             FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, v, row, "#Form:AlignHorizontal")
  112.         ELSE Dialog.ShowMsg("no focus or no selection")
  113.         END
  114.     END AlignToRow;
  115.     PROCEDURE AlignToColumn*;
  116.         VAR c: FormControllers.Controller; l, t, r, b, h, v: LONGINT; s: FormControllers.List;
  117.     BEGIN
  118.         c := FormControllers.Focus();
  119.         IF (c # NIL) & c.HasSelection() THEN
  120.             FindExtrema(c, l, t, r, b, h, v, s); Move(c, s, h, column, "#Form:AlignVertical")
  121.         ELSE Dialog.ShowMsg("no focus or no selection")
  122.         END
  123.     END AlignToColumn;
  124.     PROCEDURE SelectOffGridViews*;
  125.         VAR c: FormControllers.Controller; v: Views.View; h: FormModels.Reader;
  126.             l, t, r, b, l0, t0: LONGINT;
  127.     BEGIN
  128.         c := FormControllers.Focus();
  129.         IF c # NIL THEN
  130.             c.SelectAll(FALSE);
  131.             h := c.form.NewReader(NIL); h.Set(NIL);
  132.             h.ReadView(v);
  133.             WHILE v # NIL DO
  134.                 FormModels.GetRect(v, l, t, r, b); l0 := l; t0 := t;
  135.                 FormViews.RoundToGrid(c.view, l0, t0);
  136.                 IF (l0 # l) OR (t0 # t) THEN c.Select(v) END;
  137.                 h.ReadView(v)
  138.             END
  139.         END
  140.     END SelectOffGridViews;
  141.     PROCEDURE Selection (c: FormControllers.Controller): FormControllers.List;
  142.         VAR p, q: FormControllers. List; h: FormModels.Reader; v: Views.View;
  143.     BEGIN
  144.         p := NIL;
  145.         h := c.form.NewReader(NIL); h.Set(NIL); h.ReadView(v);
  146.         WHILE v # NIL DO
  147.             IF c.IsSelected(v) THEN NEW(q); q.next := p; p := q; q.view := v END;
  148.             h.ReadView(v)
  149.         END;
  150.         RETURN p
  151.     END Selection;
  152.     PROCEDURE ForceToGrid*;
  153.         VAR c: FormControllers.Controller;
  154.             l, t, r, b, l0, t0: LONGINT; sel, sel0: FormControllers.List; s: Domains.Operation;
  155.     BEGIN
  156.         c := FormControllers.Focus();
  157.         IF (c # NIL) & c.HasSelection() THEN
  158.             Views.BeginScript(c.view, "#Form:ForceToGrid", s);
  159.             sel := Selection(c); sel0 := sel;
  160.             WHILE sel # NIL DO
  161.                 FormModels.GetRect(sel.view, l, t, r, b); l0 := l; t0 := t;
  162.                 FormViews.RoundToGrid(c.view, l0, t0);
  163.                 c.form.Move(sel.view, l0 - l, t0 - t);
  164.                 sel := sel.next
  165.             END;
  166.             Views.EndScript(c.view, s);
  167.             WHILE sel0 # NIL DO c.Select(sel0.view); sel0 := sel0.next END
  168.         END
  169.     END ForceToGrid;
  170.     PROCEDURE DuplicateView*;
  171.         VAR c: FormControllers.Controller; v, h: Views.View; l, t, r, b, d: LONGINT;
  172.     BEGIN
  173.         c := FormControllers.Focus();
  174.         IF c # NIL THEN
  175.             v := c.Singleton();
  176.             IF v # NIL THEN
  177.                 FormModels.GetRect(v, l, t, r, b);
  178.                 h := Views.CopyOf(v, Views.deep);
  179.                 d := c.view.grid * c.view.gridFactor;
  180.                 c.form.Insert(h, l + d, t + d, r + d, b + d);
  181.                 c.Select(h)
  182.             END
  183.         END
  184.     END DuplicateView;
  185.     (** standard form-related guards **)
  186.     PROCEDURE FocusGuard*;
  187.     (** in non-FormView menus; otherwise implied by menu type **)
  188.     BEGIN
  189.         IF FormViews.Focus() = NIL THEN Dialog.Disable END
  190.     END FocusGuard;
  191.     PROCEDURE SelectionGuard*;
  192.     (** in non-FormView menus; otherwise use "SelectionGuard" **)
  193.         VAR c: FormControllers.Controller;
  194.     BEGIN
  195.         c := FormControllers.Focus();
  196.         IF (c = NIL) OR ~c.HasSelection() THEN Dialog.Disable END
  197.     END SelectionGuard;
  198.     PROCEDURE SingletonGuard*;
  199.     (** in non-FormView menus; otherwise use "SingletonGuard" **)
  200.         VAR c: FormControllers.Controller;
  201.     BEGIN
  202.         c := FormControllers.Focus();
  203.         IF (c = NIL) OR (c.Singleton() = NIL) THEN Dialog.Disable END
  204.     END SingletonGuard;
  205. END FormCmds.
  206. TextControllers.StdCtrlDesc
  207. TextControllers.ControllerDesc
  208. Containers.ControllerDesc
  209. Controllers.ControllerDesc
  210. TextRulers.StdRulerDesc
  211. TextRulers.RulerDesc
  212. TextRulers.StdStyleDesc
  213. TextRulers.StyleDesc
  214. TextRulers.AttributesDesc
  215. Geneva
  216. Documents.ControllerDesc
  217.